In data center and enterprise environments, it is common for virtual machines (VMs) running on different host systems to access virtual disks (VMDKs) that reside on a shared storage device, such as a networked storage array. Using shared storage for storing VMDKs provides a number of benefits over using storage that is local to a host system. For example, a shared storage implementation can streamline storage maintenance and configuration, particularly in environments that comprise a large number of host systems. A shared storage implementation can also enable certain virtualization management techniques, such as host failover and live migration of VMs.
However, despite the foregoing benefits, accessing VMDKs from shared storage can, in some cases, negatively affect VM I/O performance. For instance, a VM that is engaged in I/O to a shared storage device may experience poor I/O performance due to network latency between the VM's host system and the shared storage device, I/O congestion at the shared storage device, and other factors. Some server vendors have attempted to address this performance issue by incorporating flash storage devices into host systems for use as a cache. Unfortunately, existing techniques for leveraging such flash storage devices as caches generally require VM-level modifications and/or cache management mechanisms that are specific to certain brands of flash storage devices. As a result, these existing techniques fail to provide a generic host-side caching solution that can be easily and flexibly implemented in any virtualized system environment.